package com.yeskery.boot.log.record.starter.parser;

import com.yeskery.boot.log.record.starter.extend.IParseFunction;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 解析方法工厂
 * @author dushuangjiang
 * @date 2021-11-16 18:06
 */
public class ParseFunctionFactory {
    private Map<String, IParseFunction> allFunctionMap;

    /**
     * 构建解析方法工厂
     * @param parseFunctions 所有的自定义方法
     */
    public ParseFunctionFactory(List<IParseFunction> parseFunctions) {
        if (CollectionUtils.isEmpty(parseFunctions)) {
            return;
        }
        allFunctionMap = new HashMap<>();
        for (IParseFunction parseFunction : parseFunctions) {
            if (!StringUtils.hasLength(parseFunction.functionName())) {
                continue;
            }
            allFunctionMap.put(parseFunction.functionName(), parseFunction);
        }
    }

    /**
     * 获取解析方法
     * @param functionName 方法名称
     * @return 解析方法
     */
    public IParseFunction getFunction(String functionName) {
        return allFunctionMap.get(functionName);
    }

    /**
     * 是否在业务代码之前执行
     * @param functionName 方法名称
     * @return <code>true</code>在业务代码之前执行,<code>false</code>反之
     */
    public boolean isBeforeFunction(String functionName) {
        return allFunctionMap.get(functionName) != null && allFunctionMap.get(functionName).executeBefore();
    }
}
